除了常見的 cut、aws、sed…這些字串處理程式以外,bash 其實也有一個簡單的方法來處理字串的截取,在變數內容為字串時頗為實用
將字串「I Love Music」賦值給變數 demo
demo="I Love Music"
賦值之後,直接 echo $demo 這個變數就會出現「I Love Music」這段文字
echo $demo
I Love Music
如果只想 print 出特定幾個字,可以在 echo 的後面加上一些參數
格式為:echo ${VAR:Start:Count}
echo ${demo:2}
Love Music
第二個冒號後面沒有數字的話,就代表不限字數(count),所以 echo ${demo:2} 會印出 demo 變數中第三個字元以後的字,在 $demo 中,前兩個字元是「I」與「空格」,因此印出的就是第三個字元 L 之後的所有文字,也就是「Love Music」
對程式來說,第一個字的位置為 0,第二個字的位置為 1,因此打 2 其實是代表第三個字
不過這邊我發現 echo ${demo:1} 與 echo ${demo:2} 的結果會是一樣的,照理說 ${demo:1} 的結果應該是「 Love Music」,可能是因為第二個字元是空格,所以 bash 自動把開頭的空格也去掉了,但它們只是「看起來」一樣,實際上還是不同的
echo ${demo:2}
Love Music
echo ${demo:1}
Love Music
再來試範幾個完整的格式
echo ${demo:7:5}
Music
意思為截取 $demo 變數中,第 8 個字元開始的 5 個字,也就是「Music」
echo ${demo:6:6}
Music
截取 $demo 變數中,第 7 個字元開始的 6 個字,也就是「 Music」,但由於開頭為空格字元,所以看來跟上面的 {demo:7:5} 一樣
echo ${demo:6:5}
Musi
截取 $demo 變數中,第 7 個字元開始的 5 個字,也就是「 Musi」,從這個例子就可以看出前面例子中的「空格」只是沒有被呈現出來,實際上還是有算在內的
參考資料: